// lib/models/coffee_model.dart
import 'package:flutter/material.dart';
import '../services/coffee_service.dart';
import 'package:cesi/model/Coffee.dart'; // 确保这个导入路径正确

// 1. 创建一个 Model 类，它继承自 ChangeNotifier
class CoffeeModel extends ChangeNotifier {
  // 2. 在 Model 内部定义状态变量
  List<Coffee> _coffees = [];
  bool _isLoading = false;
  String? _error;
  // 3. 提供 "getter" 方法，让 UI 只能读取状态，不能直接修改
  List<Coffee> get coffees => _coffees;
  bool get isLoading => _isLoading;
  String? get error => _error;
  // 4. 修改构造函数，在创建实例时自动加载数据
  CoffeeModel() {
    // 在模型被创建的瞬间，就开始获取数据
    _fetchCoffees();
  }
  // 5. 将数据获取逻辑提取到一个私有方法中，以便构造函数和手动刷新都能调用
  Future<void> _fetchCoffees() async {
    // 设置加载状态
    _isLoading = true;
    _error = null;
    // 通知所有监听的 UI，现在正在加载
    notifyListeners();
    try {
      // 调用 Service 层获取数据
      final CoffeeService coffeeService = CoffeeService();
      _coffees = await coffeeService.getAllCoffees();
    } catch (e) {
      // 如果发生错误，保存错误信息
      _error = e.toString();
    } finally {
      // 无论成功或失败，最终都要关闭加载状态
      _isLoading = false;
      // 再次通知 UI 更新，显示最终结果（成功列表或错误信息）
      notifyListeners();
    }
  }

  // 6. 提供一个公共的刷新方法，供 UI（比如下拉刷新或重试按钮）调用
  // 这个方法内部也调用私有的 _fetchCoffees
  Future<void> fetchCoffees() async {
    await _fetchCoffees();
  }
}
